Skip to content

Synty POLYGON Military characters for both factions - #23

Merged
ralyodio merged 1 commit into
mainfrom
feat/synty-military
Jul 26, 2026
Merged

Synty POLYGON Military characters for both factions#23
ralyodio merged 1 commit into
mainfrom
feat/synty-military

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

Replaces the generated and CC0 characters with the purchased Synty POLYGON Military models: Insurgent_Male_01 for Nightcell, Soldier_Male_01 for Directorate. The pack has both by name — which neither the generated set nor the generic CC0 pack could offer (best that pack had was an Adventurer standing in for an insurgent, and a hi-vis Worker before that).

~2k triangles each on a 55-bone Unreal-standard skeleton, vs 5.9k for the generated character. Shipped assets drop to 5.13 MB against a 9 MB guard.

import_synty.py

Does two things the plain glTF path can't:

  • Retargets animation. Synty SourceFiles carry a bind pose only; the cycles are in the engine-locked Unity/Unreal packages. This maps our CC0 clips onto the Unreal skeleton with copy-rotation constraints and bakes them. Copying f-curves directly does not work — curves live in each bone's rest space and the rigs don't share rest orientations, producing a figure with its arms through its chest.
  • Shares the atlas. Synty puts the whole pack on one 4096 texture. Embedding per character cost 2.48 MB each; binding once by material name costs 357 KB total, characters ~650 KB.

Two details worth keeping: baked clips take the source names only after the source is renamed out of the way (Blender appends .001, and the engine looks clips up by exact name); and the renamed sources are deleted before export or they ship alongside and double the animation count.

Source files aren't committed — 406 MB unpacked, outside the repo. PROVENANCE.md records the purchased licence.

201 tests pass. Format, lint, typecheck clean.

🤖 Generated with Claude Code

Replaces the generated and CC0 characters on the bots with purchased Synty
POLYGON Military models: `Insurgent_Male_01` for Nightcell, `Soldier_Male_01`
for the Directorate. The pack has both by name, which is what neither the
generated set nor the generic CC0 pack could offer — the best that pack had was
an `Adventurer` standing in for an insurgent and a hi-vis `Worker` before it.

~2k triangles each on a 55-bone Unreal-standard skeleton, against 5.9k for the
generated character. Total shipped assets fall to 5.13 MB against a 9 MB guard.

Adds `import_synty.py`, which does two things the plain glTF path cannot:

  - Retargets animation. Synty's SourceFiles carry a bind pose only; the cycles
    live in the engine-locked Unity and Unreal packages. The script maps our
    CC0 clips onto the Unreal skeleton with copy-rotation constraints and bakes
    them. Copying f-curves directly does not work — curves are in each bone's
    rest space and the rigs do not share rest orientations, which produces a
    figure with its arms through its chest.
  - Shares the atlas. Synty puts the whole pack on one 4096 texture; embedding
    it per character cost 2.48 MB each, and binding it once by material name
    costs 357 KB total with characters at ~650 KB.

Two details worth keeping: the baked clips take the source clip names only
after the source is renamed out of the way, because Blender appends `.001` and
the engine looks clips up by exact name; and the renamed sources are deleted
before export or they ship alongside and double the animation count.

Source files are not committed. The pack is 406 MB unpacked and lives outside
the repo; PROVENANCE.md records the purchased licence.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

vu1nz Security Review

0 finding(s) in PR #?

No security issues found.

@ralyodio
ralyodio merged commit 1e39e0a into main Jul 26, 2026
5 of 6 checks passed
@ralyodio
ralyodio deleted the feat/synty-military branch July 26, 2026 15:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant